#include "mvdmainwindow.h"
#include "ui_mvdmainwindow.h"
#include <QStandardItemModel>
#include <QSqlRecord>
#include <QDebug>
#include <QMessageBox>
#include <QStringList>

MVDMainWindow::MVDMainWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MVDMainWindow)
{
    ui->setupUi(this);
    //testModelViem();
    initView();
}

MVDMainWindow::~MVDMainWindow()
{
    delete ui;
}

void MVDMainWindow::testModelViem()
{

    //实例化模型
    QStringListModel *s_model = new QStringListModel(this);
    QStringList sl;
    sl<<"haha"<<"heihei"<<"houhou";
    s_model->setStringList(sl);
    //ui->listView->setModel(s_model);
    ui->tableView->setModel(s_model);

}

//数据库视图
void MVDMainWindow::initView()
{



    t_model = new QSqlTableModel(this);//实例化
    //关联模型和数据库表:deviceType
    t_model->setTable("deviceType");//需要在主函数先连接好数据库
    //model关联视图
    ui->tableView->setModel(t_model);
    //查询结果集
    t_model->select();
    //修改数据提交方式为手动提交,而不是默认的用户在界面就能直接改
    t_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    //现在所有在界面中的对数据库改动会被存放在缓存区中,需要调用submitAll()提交 或revertAll()撤销缓存

    //实例化新建的comobox代理类
    CustomDelegate *delegate=new CustomDelegate(this);
    //将代理类放进视图
    ui->tableView->setItemDelegateForColumn(1,delegate);

    //实例化新建的comobox代理类
    CustomDelegate_2 *delegate_2=new CustomDelegate_2(this);
    //将代理类放进视图
    ui->tableView->setItemDelegateForColumn(3,delegate_2);


}
//增加
void MVDMainWindow::on_addbtn_clicked()
{
    //添加一个空行
#if 1
    //t_model->insertRow(t_model->rowCount());
#else
    //int row = t_model->rowCount();//获取行
    //QSqlRecord rec=t_model->record();//获取记录
    //t_model->insertRecord(row,rec);//在对应行,添加记录
#endif
    int row = ui->tableView->currentIndex().row();//获取当前选中的行
    if(row==-1){
        t_model->insertRow(t_model->rowCount());
    }else{
        t_model->insertRow(row);//在选中的行添加
    }
    /*以下代码为自动添加主键,但不能修改其他主键,不适用
    if(row==0)
        t_model->setData(t_model->index(row, 0), 1);//修改数值
    else if(row>0){
        QModelIndex index = t_model->index(row-1,0);
        int intValue =t_model->data(index).toInt()+1;//获取数值
        t_model->setData(t_model->index(row, 0), QString::number(intValue));
    }*/
    t_model->submitAll();
}
//保存
void MVDMainWindow::on_pushButton_9_clicked()
{
    //将模型中缓存区的改动提交,完成对数据库的改动
    t_model->submitAll();
    refress();
}
//删除
void MVDMainWindow::on_pushButton_10_clicked()
{
    int row = ui->tableView->currentIndex().row();
    t_model->removeRow(row);//删除
    refress();
}
//撤销
void MVDMainWindow::on_pushButton_11_clicked()
{
    //将模型中缓存区的改动撤销,回退修改
    t_model->revertAll();
    refress();
}
//刷新
void MVDMainWindow::refress()
{
    //查询结果集
    t_model->setFilter("");//写入sql的查询语句
    t_model->select();
}

//选择地址 或查看地址
void MVDMainWindow::on_pushButton_clicked()
{
    int row = ui->tableView->currentIndex().row();//获取当前选中的行
    if(row==-1){
        QMessageBox::critical(this,"错误","请选中设备",QMessageBox::Ok);
    }else{


        //获取地址坐标
        QModelIndex index = t_model->index(row,4);
        QString Value =t_model->data(index).toString();//获取数值
        if(Value!=""){//如果已有坐标,拆出数据

            QStringList parts = Value.split(",");
            int num1 = parts[0].toInt();
            int num2 = parts[1].toInt();

            qDebug()<<"创建窗口并发去消息:"<<row<<","<<num1<<","<<num2;
            deviceMap *win=new deviceMap(0,row,num1,num2);
            win->setAttribute(Qt::WA_DeleteOnClose);//设置窗口随着close释放
            win->show();
            connect(win,SIGNAL(signal_return_A(int ,int,int)),this,SLOT(getLocation(int,int,int)));
        }else{//没有坐标
            qDebug()<<"创建窗口并发去消息:"<<row<<","<<-1<<","<<-1;
            deviceMap *win=new deviceMap(0,row,-1,-1);
            win->setAttribute(Qt::WA_DeleteOnClose);//设置窗口随着close释放
            win->show();
            connect(win,SIGNAL(signal_return_A(int,int,int)),this,SLOT(getLocation(int ,int ,int )));
        }



    }
    t_model->submitAll();


}
//输入返回的地址
void MVDMainWindow::getLocation(int row, int x, int y)
{
    qDebug()<<"接收到"<<row<<","<<x<<","<<y;
    QString str=QString("%1,%2").arg(x).arg(y);
    //获取地址坐标
    QModelIndex index = t_model->index(row,4);
    t_model->setData(index,str);//输入数值
}


void MVDMainWindow::on_pushButton_13_clicked()
{
    QString directoryPath = QFileDialog::getExistingDirectory(this,tr("Select Directory"), "", QFileDialog::ShowDirsOnly);
        if (directoryPath.isEmpty()) {
            return;
        }
        QString fileName = directoryPath + "/device.csv";
        QFile file(fileName);
        //获取表格行数
        int row=t_model->rowCount();
        //循环向文档赋值
        if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
            QMessageBox::warning(this, tr("Error"),
                  tr("Cannot open file for writing: %1").arg(file.errorString()));
            return;
        }

        QTextStream out(&file);
        out<<QString("ID,监测项,设备名称,监测地址,设备IP,备注\n");
        for(int i=0;i<row;i++){
            for(int k=0;k<7;k++){            QModelIndex index = t_model->index(i,k);

                if(k==4){
                    continue;//跳过坐标
                }
                if(k!=6){
                    out << t_model->data(index).toString();
                    out<<",";//获取数值
                }

            }
            out <<"\n";
        }

        file.close();

        QMessageBox::information(this, tr("Success"),
                tr("成功创建excel文件: %1").arg(fileName));
}
